package com.ruoyi.ldzlsb.mapper;

import java.util.List;
import com.ruoyi.ldzlsb.domain.SbEquipmentType;
import org.apache.ibatis.annotations.Param;

/**
 * 设备类型Mapper接口
 * 
 * @author ruoyi
 */
public interface SbEquipmentTypeMapper 
{
    /**
     * 查询设备类型
     * 
     * @param typeId 设备类型主键
     * @return 设备类型
     */
    public SbEquipmentType selectSbEquipmentTypeByTypeId(Long typeId);

    /**
     * 查询设备类型列表
     * 
     * @param sbEquipmentType 设备类型
     * @return 设备类型集合
     */
    public List<SbEquipmentType> selectSbEquipmentTypeList(SbEquipmentType sbEquipmentType);
    
    /**
     * 查询所有设备类型
     * 
     * @return 设备类型集合
     */
    public List<SbEquipmentType> selectSbEquipmentTypeAll();

    /**
     * 新增设备类型
     * 
     * @param sbEquipmentType 设备类型
     * @return 结果
     */
    public int insertSbEquipmentType(SbEquipmentType sbEquipmentType);

    /**
     * 修改设备类型
     * 
     * @param sbEquipmentType 设备类型
     * @return 结果
     */
    public int updateSbEquipmentType(SbEquipmentType sbEquipmentType);

    /**
     * 更新设备类型状态
     * 
     * @param sbEquipmentType 设备类型
     * @return 结果
     */
    public int updateSbEquipmentTypeStatus(SbEquipmentType sbEquipmentType);

    /**
     * 删除设备类型
     * 
     * @param typeId 设备类型主键
     * @return 结果
     */
    public int deleteSbEquipmentTypeByTypeId(Long typeId);

    /**
     * 批量删除设备类型
     * 
     * @param typeIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteSbEquipmentTypeByTypeIds(Long[] typeIds);
    
    /**
     * 查询设备类型编码是否唯一
     * 
     * @param typeCode 设备类型编码
     * @return 结果
     */
    public int checkTypeCodeUnique(String typeCode);
    
    /**
     * 检查设备类型编码是否唯一（排除当前ID）
     * 
     * @param typeCode 设备类型编码
     * @param typeId 当前设备类型ID
     * @return 结果
     */
    public int checkTypeCodeUniqueExcludeSelf(@Param("typeCode") String typeCode, @Param("typeId") Long typeId);
    
    /**
     * 根据父ID查询子类型数量
     * 
     * @param parentTypeId 父ID
     * @return 子类型数量
     */
    public int selectChildCountByParentId(Long parentTypeId);
    
    /**
     * 查询设备类型树结构
     * 
     * @return 设备类型树
     */
    public List<SbEquipmentType> selectSbEquipmentTypeTree();
    
    /**
     * 查询指定类型的设备数量
     * 
     * @param typeId 类型ID
     * @return 设备数量
     */
    public int selectEquipmentCountByTypeId(Long typeId);
    
    /**
     * 逻辑删除设备类型
     * 
     * @param typeId 类型ID
     * @return 结果
     */
    public int logicDeleteSbEquipmentType(Long typeId);

    /**
     * 查询设备类型下非报废状态设备数量
     * 
     * @param typeId 类型ID
     * @return 非报废设备数量
     */
    public int selectNonScrapEquipmentCountByTypeId(Long typeId);
    
    /**
     * 查询设备类型下报废状态设备数量
     * 
     * @param typeId 类型ID
     * @return 报废设备数量
     */
    public int selectScrapEquipmentCountByTypeId(Long typeId);
    
    /**
     * 校验设备类型名称是否唯一
     * 
     * @param typeName 设备类型名称
     * @param parentTypeId 父设备类型ID
     * @return 设备类型信息
     */
    public SbEquipmentType checkTypeNameUnique(@Param("typeName") String typeName, @Param("parentTypeId") Long parentTypeId);
    
    /**
     * 根据父类型ID查询设备类型数量
     * 
     * @param parentTypeId 父类型ID
     * @return 设备类型数量
     */
    public int selectCountByParentTypeId(Long parentTypeId);
    
    /**
     * 查询可用的第一个设备类型ID
     * 
     * @return 设备类型ID
     */
    public Long selectFirstAvailableTypeId();
}
